package com.example.prison.util;

import org.springframework.web.multipart.MultipartFile;
//import sun.misc.BASE64Encoder;

import java.io.*;

public class FileUtil {

    /**
     * 将MultipartFile转换为File
     * @param multiFile
     * @return
     */
    public static File MultipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 若须要防止生成的临时文件重复,能够在文件名后添加随机码

        try {
            File file = File.createTempFile(fileName, prefix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


//    /**
//     * 将MultipartFile转换成base64字符
//     */
//    public static String imageFileUploadToBase(MultipartFile file) throws IOException {
//        String baseImg = "";
//        if(file != null){
//            System.out.println(file);
//            BASE64Encoder base64Encoder =new BASE64Encoder();//base64
//            //将该字符串保存到数据库即可
//            baseImg = "data:" + file.getContentType()+";base64," + base64Encoder.encode(file.getBytes());
//        }
//        return baseImg;
//    }

    /**
     * 将二进制转换成图片保存
     * 将图片转换成二进制保存
     * @return 1：保存正常 0：保存失败
     */
    public static String saveToImgByBytes(File imgFile, String imgPath, String imgName) {
//        int stateInt = 1;
        String url = "";
        if (imgFile.length() > 0) {
            try {
                File file = new File(imgPath, imgName+".jpg");// 可以是任何图片格式.jpg,.png等
                if(!file.getParentFile().exists()) {
                    file.mkdirs();
                }
                FileOutputStream fos = new FileOutputStream(file);
                FileInputStream fis = new FileInputStream(imgFile);
                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = fis.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                fos.flush();
                fos.close();
                fis.close();
                url = imgPath+file.getName();
            } catch (Exception e) {
//                stateInt = 0;
                e.printStackTrace();
            }
        }
        return url;
    }

    /**
     * 将接收的字符串转换成图片保存
     *
     * @param imgStr
     *            二进制流转换的字符串
     * @param imgPath
     *            图片的保存路径
     * @param imgName
     *            图片的名称
     * @return 1：保存正常 0：保存失败
     */
    public static int saveToImgByStr(String imgStr, String imgPath, String imgName) {
        try {
            System.out.println("===imgStr.length()====>" + imgStr.length() + "=====imgStr=====>" + imgStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int stateInt = 1;
        if (imgStr != null && imgStr.length() > 0) {
            try {
                // 将字符串转换成二进制，用于显示图片
                // 将上面生成的图片格式字符串 imgStr，还原成图片显示
                byte[] imgByte = hex2byte(imgStr);
                System.out.println(imgByte);
                InputStream in = new ByteArrayInputStream(imgByte);
                File file = new File(imgPath, imgName);// 可以是任何图片格式.jpg,.png等
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = in.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                fos.flush();
                fos.close();
                in.close();
            } catch (Exception e) {
                stateInt = 0;
                e.printStackTrace();
            } finally {
            }
        }
        return stateInt;
    }

    /**
     * 二进制转字符串
     *
     * @param b
     * @return
     */
    public static String byte2hex(byte[] b) // 二进制转字符串
    {
        StringBuffer sb = new StringBuffer();
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1) {
                sb.append("0" + stmp);
            } else {
                sb.append(stmp);
            }
        }
        return sb.toString();
    }

    /**
     * 字符串转二进制
     *
     * @param str
     *            要转换的字符串
     * @return 转换后的二进制数组
     */
    public static byte[] hex2byte(String str) { // 字符串转二进制
        if (str == null)
            return null;
        str = str.trim();
        int len = str.length();
        if (len == 0 || len % 2 == 1)
            return null;
        byte[] b = new byte[len / 2];
        try {
            for (int i = 0; i < str.length(); i += 2) {
                b[i / 2] = (byte) Integer.decode("0X" + str.substring(i, i + 2)).intValue();
            }
            return b;
        } catch (Exception e) {
            return null;
        }
    }

}
